#include "app.h"

static TaskHandle_t AppTaskCreate_Handle = NULL;
static TaskHandle_t LED_Task_Handle = NULL;
// static TaskHandle_t LCD_Task_Handle = NULL;
static TaskHandle_t KEY_Task_Handle = NULL;
static TaskHandle_t LVGL_TICK_TASK_Handle = NULL;
static TaskHandle_t LVGL_TASK_Handle = NULL;
static TaskHandle_t cli_task_handle = NULL;


/**
 * EasyLogger demo
 */
// void test_elog(void) {
//     /* test log output for all level */
//     log_a("Hello EasyLogger!");
//     log_e("Hello EasyLogger!");
//     log_w("Hello EasyLogger!");
//     log_i("Hello EasyLogger!");
//     log_d("Hello EasyLogger!");
//     log_v("Hello EasyLogger!");
// //    elog_raw("Hello EasyLogger!");
// }


/*****************************************************************************************
** 函数名称:  AppTaskCreate
** 函数功能: 获取空闲任务的任务堆栈和任务控制块内存
** 函数参数: 无
** 函数返回: 无
*****************************************************************************************/
void AppTaskCreate(void *parameters)
{
	BaseType_t xReturn = pdPASS;

	taskENTER_CRITICAL(); // 进入临界区

	/* 创建LED任务 */ 
	xReturn = xTaskCreate(LED_Task, "LED_Task", 512, NULL, 2, &LED_Task_Handle);  	
	if(pdPASS != xReturn){
		log_e("LED_Task creat fail ! ");
	}
		
	/* 创建按键任务 */ 
	xReturn = xTaskCreate(KEY_Task, "KEY_Task", 512, NULL, 3, &KEY_Task_Handle);
	if(pdPASS != xReturn) {
		log_e("KEY_Task creat fail ! ");
	}

	/* 创建命令行任务 */ 
	xReturn = xTaskCreate(cli_task, "cli_task", 512, NULL, 4, &cli_task_handle);
	if(pdPASS != xReturn) {
		log_e("cli_task creat fail !");
	}
								
	/* 创建LVGL tick任务 */ 
	xReturn = xTaskCreate(lvgl_tick_task, "lvgl_tick_task", 512, NULL, 4, &LVGL_TICK_TASK_Handle);
	if(pdPASS != xReturn) {
		log_e("lvgl_tick_task creat fail !");
	}
		
	/* 创建LVGL GUI任务 */
	xReturn = xTaskCreate(lvgl_task, "lvgl_task", 512, NULL, 5, &LVGL_TASK_Handle);									
	if(pdPASS != xReturn) {
		log_e("lvgl_task creat fail !");
	}
		
	vTaskDelete(AppTaskCreate_Handle);
	
	taskEXIT_CRITICAL(); // 退出临界区
}


void app_run(void)
{
    BaseType_t xReturn = pdPASS;
	
	middleware_elog_init();
	shell_init();
	
//	cli_task_init();
	lvgl_init();
	// lv_demo_widgets();
	// lv_ex_label_1();
	lv_ex_get_started_1();

	
    xReturn = xTaskCreate((TaskFunction_t) AppTaskCreate, 				/* 任务入口函数 */
							(const char *) "AppTaskCreate", 			/* 任务名字 */
							(uint16_t) 512, 							/* 任务栈大小 */
							(void * ) NULL, 							/* 任务入口函数参数 */
							(UBaseType_t) 1, 							/* 任务优先级 */
							(TaskHandle_t *) &AppTaskCreate_Handle);	/* 任务控制块指针 */

	log_v("app run success !");
	
	if(pdPASS == xReturn)
		vTaskStartScheduler();
}



